Original code notes:

.org $8004376
bl $80bfc54

.org $80bfc54
bx r2 ;this goes to an IRAM address and executes a custom HuffUncomp in ARM mode

08012c74  4c05 ldr r4, [$08012c8c] (=$0202a5b4)
08012c76  1c21 add r1, r4, #0x0
08012c78  f7f1 bl $08004364

Patch starts here:

.org $8012c78
@B8F05EFC
bl $80cb538

.org $8012caa
@B8F045FC
bl $80cb538

.org $80cb538
push {r7,lr}
add sp, -#0x8
mov r7, sp
ldr r3, LinkReturn
mov lr, r3
lsr r3, r0, #0x1f
lsl r0, r0, #0x1
lsr r0, r0, #0x1
str r0, [r7, #0x0]
str r1, [r7, #0x4]
ldr r0, Destination
ldr r2, [r0, #0x0]
ldr r0, [r7, #0x0]
cmp r3, #0x0
bne rawload
bx r2
LinkReturn:
.long 0x800437b
Destination:
.long 0x3003940
rawload:
ldrb r3, [r0, #0x0]
cmp r3, #0x0
beq Return
strb r3, [r1, #0x0]
add r0, #0x1
add r1, #0x1
b rawload
Return:
strb r3, [r1, #0x0]
bx lr

.org $8012c6c
ldr r1, [$8012c88] (=$80cb573)
@0847
bx r1

.org $8012ca0
ldr r1, [$8012cb8] (=$80cb579)
@0847
bx r1

.org $80cb572
ldr r3, One
lsl r0, r5, #0x2
b skip
ldr r3, Two
lsl r0, r0, #0x2
skip:
push {r3}
mov r3, #0x13
lsl r3, r3, #0x8
add r3, #0x3e
@Improperly handles execution that enters at "ldr r3, Two"
@Need to touch this code up
cmp r5, r3
bgt newtablebase
ldr r1, Three
b end
newtablebase:
ldr r1, Four
end:
pop {r3}
bx r3
nop
One:
.long 0x8012c71
Two:
.long 0x8012ca5
Three:
.long 0x8b808ac
Four:
.long 0x9000000